/**
在 TypeScript 中，接口（Interface）是一种用于定义对象结构的强大工具。接口可以描述对象的属性、方法以及它们的类型，从而提供类型检查和代码的自描述性。
  1. 基本概念
  - 接口 是一种用于定义对象形状的方式，可以指定对象中包含哪些属性及其类型。
  - 接口可以用于描述函数、数组、类等的结构。

  2. 使用方式
  1. 基本接口声明

  可以使用  `interface`  关键字声明一个接口，定义对象的属性和方法。
  interface User {
    name: string;
    age: number;
  }

  const user: User = {
    name: "Alice",
    age: 30,
  };
  2. 可选属性
  接口中的属性可以是可选的，使用  `?`  后缀表示。
  interface User {
    name: string;
    age?: number; // age 是可选的
  }

  const user1: User = { name: "Alice" }; // 合法
  const user2: User = { name: "Bob", age: 25 }; // 也合法
  3. 只读属性
  可以使用  `readonly`  修饰符定义只读属性，表示该属性在对象创建后不能被修改。
  interface User {
    readonly id: number;
    name: string;
  }

  const user: User = { id: 1, name: "Alice" };
  // user.id = 2; // 错误：无法分配到 "id" ，因为它是只读属性
  4. 方法声明
  接口可以包含方法的声明，指定方法的名称和参数类型。
  interface User {
    name: string;
    greet(): void; // 方法声明
  }

  const user: User = {
    name: "Alice",
    greet() {
      console.log(`Hello, my name is ${this.name}`);
    },
  };

  user.greet(); // 输出：Hello, my name is Alice
  5. 扩展接口

  接口可以通过继承来扩展其他接口，支持多重继承。
  interface Person {
    name: string;
  }

  interface Employee extends Person {
    employeeId: number;
  }

  const employee: Employee = {
    name: "Alice",
    employeeId: 123,
  };
  3. 优点
  - 清晰的结构：接口提供了一种清晰的方式来定义和描述对象的结构。
  - 类型检查：通过接口定义的类型可以在编译时进行类型检查，减少运行时错误。
  - 可扩展性：接口支持继承，允许开发者构建复杂的类型层次结构。

  4. 总结
  在 TypeScript 中，接口是一种强大的工具，用于定义对象的结构和类型。通过使用接口，开发者可以提高代码的可读性和可维护性，同时利用类型检查来减少错误。接口的可选属性、只读属性和方法声明等特性使其在构建复杂应用时非常灵活和实用。
 */
// type
const typeName = 'type-name'

type PointType = {
  x: number;
  y: number;
  z?: number;
}

// interface: 接口
interface PointInterface {
  x: number;
  y: number;
  z?: number;
}

const point: PointType = {
  x: 10,
  y: 20,
  z: 30
}

const point2: PointInterface = {
  x: 10,
  y: 20,
  z: 30
}

function printCoordinate(point: PointInterface) {
  
}

export {}